import request from './request'

/**
 * 报表系统API接口
 */

// ==================== 标准报表相关 ====================

/**
 * 获取标准报表列表
 * @param {Object} params - 查询参数
 * @param {string} params.category - 报表分类
 * @param {Array} params.dateRange - 日期范围
 * @returns {Promise}
 */
export function getStandardReports(params = {}) {
  return request({
    url: '/api/reports/standard',
    method: 'get',
    params
  })
}

/**
 * 生成标准报表
 * @param {Object} data - 报表配置
 * @param {string} data.reportId - 报表ID
 * @param {Array} data.dateRange - 日期范围
 * @param {Object} data.filters - 筛选条件
 * @returns {Promise}
 */
export function generateStandardReport(data) {
  return request({
    url: '/api/reports/standard/generate',
    method: 'post',
    data
  })
}

/**
 * 获取标准报表数据
 * @param {string} reportId - 报表ID
 * @param {Object} params - 查询参数
 * @returns {Promise}
 */
export function getStandardReportData(reportId, params = {}) {
  return request({
    url: `/api/reports/standard/${reportId}/data`,
    method: 'get',
    params
  })
}

// ==================== 自定义报表相关 ====================

/**
 * 获取自定义报表列表
 * @param {Object} params - 查询参数
 * @param {number} params.page - 页码
 * @param {number} params.pageSize - 每页数量
 * @param {string} params.keyword - 搜索关键词
 * @param {string} params.status - 状态筛选
 * @param {string} params.sortBy - 排序字段
 * @param {string} params.sortOrder - 排序方式
 * @returns {Promise}
 */
export function getCustomReports(params = {}) {
  return request({
    url: '/api/reports/custom',
    method: 'get',
    params
  })
}

/**
 * 创建自定义报表
 * @param {Object} data - 报表数据
 * @param {string} data.name - 报表名称
 * @param {string} data.description - 报表描述
 * @param {string} data.dataSource - 数据源
 * @param {Array} data.selectedFields - 选中字段
 * @param {Array} data.filters - 筛选条件
 * @param {Object} data.sortConfig - 排序配置
 * @returns {Promise}
 */
export function createCustomReport(data) {
  return request({
    url: '/api/reports/custom',
    method: 'post',
    data
  })
}

/**
 * 更新自定义报表
 * @param {number} id - 报表ID
 * @param {Object} data - 报表数据
 * @returns {Promise}
 */
export function updateCustomReport(id, data) {
  return request({
    url: `/api/reports/custom/${id}`,
    method: 'put',
    data
  })
}

/**
 * 删除自定义报表
 * @param {number} id - 报表ID
 * @returns {Promise}
 */
export function deleteCustomReport(id) {
  return request({
    url: `/api/reports/custom/${id}`,
    method: 'delete'
  })
}

/**
 * 复制自定义报表
 * @param {number} id - 报表ID
 * @param {Object} data - 复制配置
 * @param {string} data.name - 新报表名称
 * @returns {Promise}
 */
export function copyCustomReport(id, data) {
  return request({
    url: `/api/reports/custom/${id}/copy`,
    method: 'post',
    data
  })
}

/**
 * 获取自定义报表详情
 * @param {number} id - 报表ID
 * @returns {Promise}
 */
export function getCustomReportDetail(id) {
  return request({
    url: `/api/reports/custom/${id}`,
    method: 'get'
  })
}

/**
 * 执行自定义报表
 * @param {number} id - 报表ID
 * @param {Object} params - 执行参数
 * @param {Array} params.dateRange - 日期范围
 * @param {Object} params.filters - 动态筛选条件
 * @returns {Promise}
 */
export function executeCustomReport(id, params = {}) {
  return request({
    url: `/api/reports/custom/${id}/execute`,
    method: 'post',
    data: params
  })
}

// ==================== 数据源相关 ====================

/**
 * 获取可用数据表列表
 * @returns {Promise}
 */
export function getDataTables() {
  return request({
    url: '/api/reports/data-sources/tables',
    method: 'get'
  })
}

/**
 * 获取数据表字段信息
 * @param {string} tableName - 表名
 * @returns {Promise}
 */
export function getTableFields(tableName) {
  return request({
    url: `/api/reports/data-sources/tables/${tableName}/fields`,
    method: 'get'
  })
}

/**
 * 预览数据表数据
 * @param {string} tableName - 表名
 * @param {Object} params - 查询参数
 * @param {number} params.limit - 限制条数
 * @returns {Promise}
 */
export function previewTableData(tableName, params = {}) {
  return request({
    url: `/api/reports/data-sources/tables/${tableName}/preview`,
    method: 'get',
    params
  })
}

// ==================== 报表导出相关 ====================

/**
 * 导出报表为PDF
 * @param {Object} data - 导出配置
 * @param {string} data.reportType - 报表类型 (standard/custom)
 * @param {string|number} data.reportId - 报表ID
 * @param {Object} data.config - 导出配置
 * @returns {Promise}
 */
export function exportReportToPDF(data) {
  return request({
    url: '/api/reports/export/pdf',
    method: 'post',
    data,
    responseType: 'blob'
  })
}

/**
 * 导出报表为Excel
 * @param {Object} data - 导出配置
 * @param {string} data.reportType - 报表类型 (standard/custom)
 * @param {string|number} data.reportId - 报表ID
 * @param {Object} data.config - 导出配置
 * @returns {Promise}
 */
export function exportReportToExcel(data) {
  return request({
    url: '/api/reports/export/excel',
    method: 'post',
    data,
    responseType: 'blob'
  })
}

/**
 * 导出报表为CSV
 * @param {Object} data - 导出配置
 * @param {string} data.reportType - 报表类型 (standard/custom)
 * @param {string|number} data.reportId - 报表ID
 * @param {Object} data.config - 导出配置
 * @returns {Promise}
 */
export function exportReportToCSV(data) {
  return request({
    url: '/api/reports/export/csv',
    method: 'post',
    data,
    responseType: 'blob'
  })
}

// ==================== 报表模板相关 ====================

/**
 * 获取报表模板列表
 * @param {Object} params - 查询参数
 * @returns {Promise}
 */
export function getReportTemplates(params = {}) {
  return request({
    url: '/api/reports/templates',
    method: 'get',
    params
  })
}

/**
 * 创建报表模板
 * @param {Object} data - 模板数据
 * @returns {Promise}
 */
export function createReportTemplate(data) {
  return request({
    url: '/api/reports/templates',
    method: 'post',
    data
  })
}

/**
 * 从模板创建报表
 * @param {number} templateId - 模板ID
 * @param {Object} data - 报表配置
 * @returns {Promise}
 */
export function createReportFromTemplate(templateId, data) {
  return request({
    url: `/api/reports/templates/${templateId}/create-report`,
    method: 'post',
    data
  })
}

// ==================== 报表统计相关 ====================

/**
 * 获取报表使用统计
 * @param {Object} params - 查询参数
 * @returns {Promise}
 */
export function getReportStatistics(params = {}) {
  return request({
    url: '/api/reports/statistics',
    method: 'get',
    params
  })
}

/**
 * 获取热门报表排行
 * @param {Object} params - 查询参数
 * @param {number} params.limit - 限制数量
 * @returns {Promise}
 */
export function getPopularReports(params = {}) {
  return request({
    url: '/api/reports/popular',
    method: 'get',
    params
  })
}

// ==================== 报表权限相关 ====================

/**
 * 获取报表权限信息
 * @param {number} reportId - 报表ID
 * @returns {Promise}
 */
export function getReportPermissions(reportId) {
  return request({
    url: `/api/reports/${reportId}/permissions`,
    method: 'get'
  })
}

/**
 * 设置报表权限
 * @param {number} reportId - 报表ID
 * @param {Object} data - 权限配置
 * @returns {Promise}
 */
export function setReportPermissions(reportId, data) {
  return request({
    url: `/api/reports/${reportId}/permissions`,
    method: 'put',
    data
  })
}

/**
 * 分享报表
 * @param {number} reportId - 报表ID
 * @param {Object} data - 分享配置
 * @param {Array} data.userIds - 分享用户ID列表
 * @param {string} data.permission - 权限类型 (view/edit)
 * @returns {Promise}
 */
export function shareReport(reportId, data) {
  return request({
    url: `/api/reports/${reportId}/share`,
    method: 'post',
    data
  })
}
